Ship the OAI composition rules and reclassify unrestricted-shell rules - #49
Closed
jhumel-code wants to merge 1 commit into
Closed
Ship the OAI composition rules and reclassify unrestricted-shell rules#49jhumel-code wants to merge 1 commit into
jhumel-code wants to merge 1 commit into
Conversation
Brings the stale feat/severity-reclassification-acac work onto current main. All of it existed only on that branch, so no user was receiving any of it. Adds four rules that were mirrored in the engine's test fixture but shipped to nobody: OAI-025 (dead tool via call-graph liveness), OAI-107 (handoff target wires shell tools), and OAI-112/OAI-113 (transitive shell through handoff chains). OAI-112 and OAI-113 are the only rules anywhere exercising reachability_is and transitive_capability_exceeds_direct. Reclassifies six permission-bypass and unrestricted-shell rules from high to critical: CSDK-103, CSDK-120, CSDK-201, CSDK-202, ADK-008 and LC-101. ADK-008 took a merge conflict. main had corrected the title and widened the matcher to cover both ExecuteBashTool (current google-adk) and BashTool (earlier releases); the stale branch still had the BashTool-only matcher. Kept main's corrected title, explanation and wider matcher, and took only the severity bump from the branch. Compliance crosswalks are excluded: they moved to the engine repo, which is where the only consumer lives. CLAUDE.md now records that this repo is not their home.
sairenchristianbuerano
approved these changes
Aug 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces #48, which also carried the compliance crosswalk. That crosswalk has
moved to the engine repo (see below), so this PR is rules only.
Brings the stale
feat/severity-reclassification-acacwork onto currentmain.All of it existed only on that branch, so no user was receiving any of it.
What lands
Four rules that were tested but never shipped. OAI-025 (dead tool via
call-graph liveness), OAI-107 (handoff target wires shell tools), OAI-112 and
OAI-113 (transitive shell through handoff chains). OAI-112 and OAI-113 are the
only rules anywhere exercising
reachability_isandtransitive_capability_exceeds_direct.Severity reclassification. Six permission-bypass / unrestricted-shell rules
move from high to critical: CSDK-103, CSDK-120, CSDK-201, CSDK-202, ADK-008 and
LC-101.
Merge conflict resolution
One conflict, in ADK-008.
mainhad corrected the title and widened the matcherto cover both
ExecuteBashTool(current google-adk) andBashTool(earlierreleases); the stale branch still had the
BashTool-only matcher plus theseverity bump. Resolved by keeping
main's corrected title, explanation andwider matcher, and taking only the severity bump. Taking the branch wholesale
would have silently narrowed the rule so it stopped detecting current google-adk.
Why the compliance crosswalk is no longer here
It served no one in this repo. Compliance is a Guard-only surface: the
open-source scanner has no compliance package and no
compliancecommand, so noOSS user could consume the crosswalk, and Guard users never got it automatically
because the CLI defaults to a hardcoded pack. The engine's rule loader skips a
mappings/subtree outright, so no scan ever read those files. The net effectwas editorial mapping work, with reviewer attribution, published in a public
repo while delivering nothing to anyone. It now lives embedded in the engine,
with a referential-integrity test that fails when a mapping names a rule no pack
defines.
CLAUDE.mdhere records that this repo is not its home.Verification
trustabl rules validatereports the same 12 errors on this branch as on cleanorigin/main, so this introduces no new schema, duplicate-ID orunknown-predicate errors. Those 12 are the known missing-predicate drift
(CSDK-017/018, CSDK-204, CSKILL-080..086), untouched here.
Known follow-ups, not addressed here
before it populates
ToolDef.Reachability, andreachability_isreturns falseon an empty value. It ships inert until the engine ordering is fixed. Its unit
test passes only because it hand-sets the field on a synthetic tool.
input_filter, but that can only be attached via thehandoff(...)helper,which discovery marks External, which empties the transitive closure and
silences all three composition rules.
severity: highfor the six reclassifiedrules, and has no rationale doc for the four new ones.